class Watcher {
  constructor(vm, key, cb) {
    this.vm = vm;
		this.key = key;
		// 回调函数负责更新视图
    this.cb = cb;
    // 1.实例化时，要把自己加入Dep类中，
    // 1.1 先将自己存储在target静态属性中
    Dep.target = this;
    // 1.2 再通过取值操作，触发执行属性的getter，在observer.js文件中，属性的getter方法中会通过判断Dep.target属性来进行存储当前的watcher实例
    this.oldValue = this.vm[key];
    // 1.3 为了避免重复添加，每一次判断后，需要将Dep的target属性置空。
    Dep.target = null;
	}
	// 2.更新视图
  update() {
    //此时，vue实例对象中data中的key属性值已经变为最新的了
    let newValue = this.vm[this.key];
    if (newValue === this.oldValue) return;
    this.cb(newValue);
  }
}
